
from setting import BASE_URL
import requests
from loguru import logger
from utils.object_utils import cache

"""
作用：为所有接口提供一些公共功能 ，方便接口调用 。
具体包括 ：
    1. 返回完整的URL地址
    2. 重新封装get,post方法
    3. 处理请求头
"""


class Base(object):

    def get_url(self,path,params=None):
        """
        返回一个完成的URL ：http://ip:port/api?params
        :param path :接口路径
        :param params : 查询参数
        :return:
        """
        if params:
            full_path = BASE_URL + path + '?' + params
            return full_path
        return BASE_URL + path

    def get(self,url):
        """
        重新封装requests中的get方法 ，
        (1) 加上日志 : loguru
        (2) 加上错误异常 ：try ... except
        :return:
        """
        result = None
        # logger.debug("请求url:{}".format(url))
        response = requests.get(url,headers=self._get_headers())
        try:
            result = response.json()  # 处理响应体 : json()
            logger.info("请求URL:{},返回结果:{}".format(url,result))
            return result
        except Exception as e:
            logger.error("请求get方法异常,返回数据:{}".format(result))

    def post(self,url,data):
        """
        重新封装post方法
        :return:
        """
        result = None
        response = requests.post(url,json=data,headers=self._get_headers())
        try:
            result = response.json()
            logger.info("请求URL:{},请求体:{},返回结果:{}".format(url,data,result))
            return result
        except Exception as e:
            logger.error("请求post方法异常,返回数据:{}".format(result))

    def _get_headers(self):
        """
        处理请求头的返回格式 ，包含健名：Content-Type ,X-Litemall-Admin-Token
        :return:
        """
        headers = {"Content-Type":"application/json"}
        token = cache.get('token')      # 从缓存中提取token的值
        if token:
            headers.update({'X-Litemall-Admin-Token':token})
            return headers
        return headers


if __name__ == '__main__':
    base = Base()
    print(base.get_url("/admin/auth/login",'key=value&key1=value1'))
